package oracle.version1;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.*;
import java.util.Properties;

/**
 * 版本1--封装【拓展】
 * Mysql工具类
 * 1.数据库：地址、用户名、密码  私有属性--静态化【本类直接调用】
 * 2.静态方法【本类直接调用】getParam(String 路径)
 *  目的：使用方法调用外部文件   db_mysql.properties
 *  db_mysql.properties 对应  Java Properties类：读取键值对形式信息
 *  Properties类 提供方法   load() 读取配置文件信息【键值对-数据库基本信息】
 * 3.通过封装概念--链接成功数据库【通用一个类链接Mysql和Oracle】
 */
public class Mysql {
    //1.任何数据库具备:地址、用户名、密码
    private static String url;
    private static String username;
    private static String password;
    //2.静态方法：getParam(String 路径)---链接数据库--读取信息
    //2.1 配置文件：键值对出现，保存数据库对应的基本信息    xxx.properties
    public static void getParam(String fileName) throws IOException {
    //2.2 Properties类--读取xxx.properties配置文件信息
        Properties p=new Properties();
    //2.3 外置文件读取---借助IO---搬运数据---InputStream
    //Mysql.class 表示当前MySQL类的对象
    //理解：图书馆--区域存MySQL相关书籍
    //getClassLoader()  获取当前类的加载器
    //理解：图书馆--区域存MySQL相关书籍---图书管理员
    //getResourceAsStream(文件) 获取当前加载器中键值对信息
    //理解：图书馆--区域存MySQL相关书籍---图书管理员---拿明确书籍
        InputStream fis=
                Mysql.class.getClassLoader().getResourceAsStream(fileName);
        p.load(fis);
    //2.4  读取数据库基本信息【url、用户、密码】赋值给当前对象【url、用户、密码】
        //Properties类--提供方法 getProperty读取db_mysql.properties中键
        url=p.getProperty("url");
        username=p.getProperty("username");
        password=p.getProperty("password");
    }

    public static void main(String[] args) throws IOException, SQLException {
        //测试封装概念--链接成功数据库
        Mysql.getParam("db_mysql.properties");
        //参考MySQL封装Oracle【作业2】
        //链接成功MySQL---book表---增加一条记录操作
        //1.创建连接---Connection 代表Java链接成功数据库
        Connection con=DriverManager.getConnection(url,username,password);
        //2.执行sql---Statement  代表Java执行数据 sql
        Statement st=con.createStatement();
        //3.【CRUD操作：增删改 executeUpdate() 查executeQuery】
        String sql="insert into book values(6,'余华','活着',79,'2010年',80,'否')";
        //练习：删和改--查
        //String sql="delete from book where id=6"; //删除第六条数据
        //String sql="update book set discount='是' where id=6";//修改第六条数据的打折类型
        /*----------------------------------查------------------------------------------*/
        String select_sql ="select * from book ";
        Statement st_sql=con.createStatement();
        ResultSet rs=st_sql.executeQuery(select_sql);
        while(rs.next()){   //取出每个[7个]字段记录【数据】
            //getInt("字段名") 取字段名下类型
            int id=rs.getInt("id");
            //getString("字段名")  取字段名下类型
            String author=rs.getString("author");
            String name=rs.getString("name");
            int price=rs.getInt("price");
            String date=rs.getString("date");
            int number=rs.getInt("number");
            String discount=rs.getString("discount");
            //打桩：打印作者记录
            System.out.println("序号:"+id+"|"+"书名："+name+"|"+"作者："+author+"|"+"价格："+price+"|"+"打折情况："+discount+"|"+"出版日期"+date+"|"+"书籍数量"+number);
        }
        int rows=st.executeUpdate(sql);//只负责执行增删改。返回值 int类型
        System.out.println("成功添加了："+rows+"一条记录");
        //4.关闭链接--Statement--Connection 王培贤

        System.out.println("测试数据库链接成功"+url+username+password);
    }
}
